本篇跟著 程式開發(2) ,接續往下討論
INPUT依據RECORD的型態,可以有兩種指令方式
INPUT a1,a2,a3 FROM formonly.s1, formonly.s2, formonly.s3
進行輸入
DEFINE inp RECORD
a1 VARCHAR(10), a2 VARCHAR(10), a3 VARCHAR(10)
END RECORD
INPUT BY NAME inp.*
這樣對於大量的欄位設定是較為簡單的,從 table的創立到程式碼的產生,就可以是一線式的快速完成。但缺點也顯而易見,就是若輸入的過程中想加入其他表格的欄位,可能需要從表單開始修改起,或是將INPUT BY NAME的星號展開。
INPUT 可以作為單行指令(在不附帶任何控制區塊的狀況下),但作為單行指令時,後方應明確的加上『;』
INPUT控制區塊,大抵與 MENU 是相同的。但是重點功能在做『輸入』,因此具備下列協助輸入的控制區塊。
控制區塊不用全部設立出來,有需要的在做就好。
以之前的 INPUT a1 FROM s1 為例:
在這些控制區塊內,可以使用一些跳動的指令,例如:NEXT FIELD s2 (跳入s2) [當然也可使用 NEXT FIELD CURRENT/ PREVIOUS/ NEXT] 跳入指定欄位。
INPUT ARRAY 只有一種輸入的指令:
INPUT ARRAY inp_array FROM s_array.*
INPUT ARRAY與 INPUT 相比,多出了行的處理。以下列出差異的部分:
除此之外,因為資料庫中的資料處理方式比較方便的就是一筆、一筆的處理,所以這邊為了搭配資料處理,也有下列控制區塊:
從以上的訊息,對照資料庫的處理方式,可以歸納下列幾點
- 新增一行時,初始值得給予要寫在 BEFORE INSERT
- 新增一行的 INSERT INTO指令要放在 AFTER INSERT
- 修改一行的 UPDATE 指令要放在 ON ROW CHANGE
- 刪除一行的 DELETE 指令要放在 BEFORE DELETE
在INPUT / INPUT ARRAY體系中有一個屬性稱做緩衝。
緩衝模式的存在主要為了節省一些FGLRUN(DVM)與 client之間的傳輸量,避免過於密集的改變拖累畫面的呈現效率,
但此情況常被開發人員在測試中誤解為程式未生效。故有需要加以說明澄清。
利用 ATTRIBUTES區塊進行調整
INPUT BY NAME p_site.* ATTRIBUTES(UNBUFFERED)
Genero FGL中還有一種 自帶畫面 的詢問資料方式,PROMPT。依據輸入模式的不同,也區分為 2 種輸入指令
PROMPT "今天是什麼節日?" FOR answer
或
PROMPT "你喜歡哪一個英文字母?" FOR CHAR ans_1
從上面的範例,可以很明顯看出,若只需要單字元的回答,可以增加CHAR 來做控制。
由於是簡易的問題答詢,因此控制區塊如同 MENU 一般,僅有支援
若有輸入資料預設值的異動需求時,同樣支援 UNBUFFERED 進行緩衝區域的取消。
透過本章節的匯總,應該對於如何收取用戶資料非常理解,若有相關問題可以在下方討論區留言討論。